package 递归实现组合型枚举;

//import java.util.Scanner;
//
//public class Main {
//
//    static int N = 30, n, m;
//    static int[] nums = new int[N];
//
//    public static void main(String[] args) {
//        Scanner in = new Scanner(System.in);
//        n = in.nextInt();
//        m = in.nextInt();
//        dfs(0, 1);
//    }
//
//    private static void dfs(int u, int start) {
//        if (u == m) {
//            for (int i = 0; i < m; i++) {
//                System.out.print(nums[i] + " ");
//            }
//            System.out.println();
//            return;
//        }
//        for (int i = start; i <= n; i++) {
//            nums[u] = i;
//            dfs(u+1,i+1);
//        }
//    }
//}


import java.util.Scanner;

public class Main {
    static int N = 30, n, m;
    static boolean[] st = new boolean[N];

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        m = in.nextInt();
        dfs(1, 0);
    }

    private static void dfs(int u, int s) {
        if (s == m) {
            for (int i = 1; i <= n; i++) {
                if (st[i]) {
                    System.out.print(i + " ");
                }
            }
            System.out.println();
            return;
        }
        if (u > n) {
            return;
        }
        dfs(u + 1, s);
        st[u] = true;
        dfs(u + 1, s + 1);
        st[u] = false;
    }
}